package c_leetcode.a_88_merge_sorted_array;

/**
 * 倒序双指针
 * 时间复杂度    O(m+n)
 * 空间复杂度    O(1)
 *
 * @author FRSF
 * @since 2025/2/27 21:15
 */
public class ReverseDoublePoint {
    public static void main(String[] args) {
        new ReverseDoublePoint()
                .merge(new int[]{1, 2, 3, 0, 0, 0}, 3, new int[]{2, 5, 6}, 3);
    }

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p = nums1.length - 1;
        int p1 = m - 1;
        int p2 = n - 1;

        while (p1 >= 0 && p2 >= 0) {
            nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--];
        }

        while (p1 >= 0) {
            nums1[p--] = nums1[p1--];
        }

        while (p2 >= 0) {
            nums1[p--] = nums2[p2--];
        }
    }
}
